package main

import "fmt"

/*
Go 语言中没有异常机制， 可以使用 panic/recover 模式来处理错误
panic 可以在任何地方引发， 但 recover 只能在 defer调用的函数中有效
*/
func fn1() {
	fmt.Println("fn1")
}
func fn2() {
	defer func() {
		err := recover()
		if err != nil { //err 不等于nil  说明有异常
			fmt.Println(err) //抛出异常
		}
	}()
	panic("抛出异常")
}

func fn3(a, b int) int {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("err:", err) //err: runtime error: integer divide by zero
		}
	}()
	return a / b
}

func main() {
	fn1()
	fn2()
	fn3(10, 0)
	fmt.Println("结束")
}
